import { badminton } from "./DataTypes"

const MinUserDataVersion = 14
const InitUserDataVersion = 15
const CurrentUserDataVersion = 17

const DataVersionInitFuncs: Map<number, (data: badminton.proto.IUserData)=>badminton.proto.IUserData> = new Map([
  [MinUserDataVersion, function (data: badminton.proto.IUserData): badminton.proto.IUserData {
    // reset oldUserdata
    return {}
  }],
  [InitUserDataVersion, function (data: badminton.proto.IUserData): badminton.proto.IUserData {
    return data
  }],
  [16, function (data: badminton.proto.IUserData): badminton.proto.IUserData {
    data.lastGameRecord = {}
    return data
  }],
  [17, function (data: badminton.proto.IUserData): badminton.proto.IUserData {
    data.badmintonString = data.badmintonString || {}
    return data
  }],
])

export function UserDataCheck (userData: badminton.proto.IUserData): {
    dirty: boolean,
    userData: badminton.proto.IUserData
} {
  let dirty = false
  userData.version = userData.version || MinUserDataVersion - 1
  if (userData.version < CurrentUserDataVersion) {
    const start = Math.max(userData.version + 1, MinUserDataVersion)
    for (let v = start; v <= CurrentUserDataVersion; v++) {
      if (DataVersionInitFuncs.has(v)) {
        userData = DataVersionInitFuncs.get(v)(userData)
      }
    }
    userData.version = CurrentUserDataVersion
    dirty = true
  }
  return {dirty, userData}
}